import { NextRequest, NextResponse } from 'next/server';
import { authMiddleware, TokenPayload } from '@/utils/auth';
import UserModel from '@/models/user';

export async function POST(request: NextRequest) {
  try {
    // 验证用户身份
    const authResult = await authMiddleware(request);
    if (authResult instanceof NextResponse) {
      return authResult; // 返回错误响应
    }

    const decoded = authResult as TokenPayload;
    const userId = decoded.id;

    // 获取用户信息
    const user = await UserModel.findById(userId);
    if (!user) {
      return NextResponse.json(
        { error: '用户不存在' },
        { status: 404 }
      );
    }

    // 解析请求体
    const body = await request.json();
    console.log('收到切换企业模式请求:', body);

    const { is_company_admin, company_role, company, password } = body;

    // 验证必填字段
    if (is_company_admin && (!company_role || !company)) {
      console.error('验证失败: 公司名称和职位不能为空');
      return NextResponse.json(
        { error: '公司名称和职位不能为空' },
        { status: 400 }
      );
    }

    // 验证密码
    if (!password) {
      console.error('验证失败: 密码不能为空');
      return NextResponse.json(
        { error: '请输入您的登录密码以验证身份' },
        { status: 400 }
      );
    }

    // 验证密码是否正确
    const bcrypt = require('bcryptjs');
    const isPasswordValid = await bcrypt.compare(password, user.password);

    if (!isPasswordValid) {
      console.error('验证失败: 密码错误');
      return NextResponse.json(
        { error: '密码错误，请重新输入' },
        { status: 401 }
      );
    }

    console.log('当前用户信息:', {
      userId,
      username: user.username,
      is_company_admin: user.is_company_admin,
      company: user.company
    });

    // 更新用户信息
    try {
      console.log('执行更新用户信息 SQL');
      const [result] = await UserModel.query<any>(
        `UPDATE users
         SET is_company_admin = ?,
             company_role = ?,
             company = ?
         WHERE id = ?`,
        [
          is_company_admin,
          company_role || null,
          company || user.company,
          userId
        ]
      );

      console.log('更新用户信息结果:', result);

      // 检查结果是否有效
      if (!result || typeof result !== 'object' || !('affectedRows' in result) || result.affectedRows === 0) {
        console.error('更新用户信息失败: 影响行数为0');
        return NextResponse.json(
          { error: '更新用户信息失败' },
          { status: 500 }
        );
      }

      // 如果是首次切换为企业模式，创建公司记录
      if (is_company_admin && !user.is_company_admin) {
        try {
          // 检查公司是否已存在
          const [existingCompanies] = await UserModel.query<any[]>(
            `SELECT id FROM companies WHERE name = ?`,
            [company]
          );

          if (!existingCompanies || (Array.isArray(existingCompanies) && existingCompanies.length === 0)) {
            // 创建新公司
            await UserModel.query(
              `INSERT INTO companies
               (name, admin_user_id, created_at)
               VALUES (?, ?, NOW())`,
              [company, userId]
            );
          }
        } catch (companyError) {
          console.error('创建公司记录失败:', companyError);
          // 不中断流程，继续返回成功
        }
      }

      return NextResponse.json(
        {
          message: is_company_admin ? '已切换为企业模式' : '已退出企业模式',
          is_company_admin,
          company_role: company_role || null,
          company: company || user.company
        },
        { status: 200 }
      );

    } catch (dbError) {
      console.error('更新用户企业模式失败:', dbError);
      return NextResponse.json(
        { error: '更新用户企业模式失败' },
        { status: 500 }
      );
    }

  } catch (error) {
    console.error('切换企业模式错误:', error);
    return NextResponse.json(
      { error: '服务器错误，请稍后再试' },
      { status: 500 }
    );
  }
}
